iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Software Development

Should I use fp-ts系列 第 21

[Should I use fp-ts?] Day 21 - fp-ts Either trycatch 2

  • 分享至 

  • xImage
  •  

在本系列文中,所有的程式碼都可以在 should-i-use-fp-ts 找到,今日的範例放在 src/day-21 並且有測試可以讓大家練習。

Either trycatch

今天我們使用 Either 來包裝 JSON.stringify,跟昨天的 JSON.parse 一樣,正常使用的時候,這些函式的型別並不會告知使用者會有 exception 的可能性,這樣可能導致 runtime 時出現無法預期的錯誤。

// Type: (value: any, replacer?: (string | number)[] | null | undefined, space?: string | number | undefined) => string | unknown
const normalStringify = (...args: Parameters<typeof JSON.stringify>) => {
  try {
    return JSON.stringify(...args);
  } catch (error) {
    return error;
  }
};

跟昨天的 normalParse 一樣,輸出型別只會有 string | unknown,這邊使用 Either 來改善他的型別,讓使用函式的人可以了解使用的風險。

// Type: (value: any, replacer?: (string | number)[] | null | undefined, space?: string | number | undefined) => E.Right<string> | E.Left<unknown>
const stringify = (...args: Parameters<typeof JSON.stringify>) => {
  try {
    const stringified = JSON.stringify(...args);
    if (typeof stringified !== 'string') {
	    throw new Error('Unsupported structure');
    }
    return E.right(stringified);
  } catch (error) {
    return E.left(error);
  }
};

每次使用 stringify 函式的時候,都會需要考慮兩種情況(left and right),這樣可以有效降低無法預期的風險。

今天的主題在 should-i-use-fp-tssrc/day-21 並且有測試可以讓大家練習。

Reference

Either.ts | fp-ts


上一篇
[Should I use fp-ts?] Day 20 - fp-ts Either trycatch
下一篇
[Should I use fp-ts?] Day 22 - fp-ts Apply
系列文
Should I use fp-ts25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言